Ein Bereichs-Objekt erzeugen
Den kompletten Code der Beispiele in diesem Abschnitt finden Sie in der Datei "Objekt.xls". |
Mit Visual Basic steuern oder schaffen Sie EXCEL-Objekte, benützen deren Methoden und lesen oder setzen deren Eigenschaften. Sie können aber auch selbst Objekte erzeugen.
Angenommen, Sie wollen eine Zelle in der aktiven Tabelle auswählen. Das geht recht einfach:
[A1].Select
Liegt diese Zelle aber nicht in der aktiven Arbeitsmappe, wird die Ansprache mühsamer:
Workbooks("OBJEKT.XLS").Activate Worksheets("Tabelle1").Select Cells(1, 1).Select
Stellen Sie sich vor, Sie müssen zwanzig Mal eine Zelle in einer nicht aktiven Arbeitsmappe ansprechen! Was für eine Schreibarbeit! Und wie schlecht lesbar! Außerdem führt dieser Code dazu, daß Arbeitsmappe und Tabelle in den Vordergrund geholt werden-das kann passen, muß es aber nicht.
Zum Glück bietet uns VBA eine Lösung an. Wir können ein Objekt einer Variablen zuweisen und es ab diesem Zeitpunkt durch Angabe des Variablennamens manipulieren.
DIE "SET"-ANWEISUNG
Wenn Zellen ausgewählt worden sind, lohnt es sich häufig, sie als Bereichs-Objekt anzusprechen und mit den Methoden und Eigenschaften des Bereichs-Objektes zu arbeiten. Für das Schaffen von Objekten ist die "Set"-Anweisung gedacht:
Set Variable=Objekt
Sub Objekt_1() Set MeinBereich = Workbooks("Objekt.XLS"). _ Sheets("Tabelle1").Cells(1, 1) MeinBereich.Value = "Diese Meldung kommt aus Zelle A1 von Tabelle1, " & _ "Arbeitsmappe Objekt.XLS" MsgBox MeinBereich.Value End Sub
Enthält der Bereich, aus dem ein Objekt gebildet werden soll, mehrere Zellen, so muß-im Gegensatz zum VBA-Handuch für EXCEL 5.0, Seite 116, das Objekt so gebildet werden:
Set MeinObjekt = Workbooks("OBJEKT.XLS").Worksheets("Tabelle1"). _ Range(Worksheets("Tabelle1").Cells(1; 1); _ Worksheets("Tabelle1"). Cells(8; 1))
Mit Hilfe der "Set"-Anweisung können wir Kopien von Objekten erzeugen:
Set DeinObjekt = ActiveWindow.Selection Set TestObjekt = DeinObjekt ' Objektreferenz zuweisen. ' TestObjekt und DeinObjekt beziehen sich auf dasselbe Objekt. DeinObjekt.Text = "Hallo Welt" ' Eigenschaft initialisieren. TestZnF = TestObjekt.Text ' "Hallo Welt" zurückgeben ' Zuordnung beenden. TestObjekt bezieht sich nicht mehr auf DeinObjekt. Set TestObjekt = Nothing
Hinweis Verwenden wir bei Bereichs-Objekten die Anweisung
Variable=Objekt
dann erhält "Variable" den Wert des Objektes. Es wird also keine Objektvariable geschaffen!
NUR EINEN TEIL EINES OBJEKTES ZUWEISEN
In unserem Beispiel oben:
Set MeinBereich = Workbooks("Objekt.XLS"). _ Sheets("Tabelle1").Cells(1, 1)
enthält "MeinBereich" die feste Zuordnung an Zelle A1 von "OBJEKT.XLS", "Tabelle1". Was ist, wenn wir aber verschiedene Zellen in diesem Tabellenblatt ansprechen wollen? Diesfalls wäre es klüger, der Objektvariablen nur die Referenz auf Mappe und Blatt zuzuweisen:
Sub Objekt_2() Set Meinblatt = Workbooks("Objekt.XLS"). _ Sheets("Tabelle1") Meinblatt.Cells(1, 1).Value = " Diese Meldung kommt aus Zelle A1 von Tabelle1, " & _ "Arbeitsmappe Objekt.XLS" MsgBox Meinblatt.Cells(1, 1).Value Meinblatt.Cells(1, 1).Font.Bold = True End Sub
Dies gibt uns die Möglichkeit, zum Beispiel anschließend zu schreiben:
MeinBlatt.Cells(1, 1).Font.Bold = True
EINE UNABHÄNGIGE KOPIE EINES OBJEKTES ERZEUGEN
Wie wir weiter oben gesehen haben, können wir mit der Anweisung
Set Objektvariable2=Objektvariable1
die Kopie eines Objektes erzeugen. Weisen wir VBA an:
Objektvariable2.Value=Wert
dann erhält auch Objektvariable1 diesen Wert, den sie verweist ja auf die selbe Zelle.
Sub Objekt_3() Set Originalbereich = Workbooks("OBJEKT.XLS"). _ Sheets("Tabelle1").Cells(1, 1) Set Kopiebereich = Originalbereich Originalbereich.Value = "Kopiebereich enthält den Wert von Originalbereich" MsgBox Kopiebereich.Value End Sub
Ändern wir die Größe von "Originalbereich", behält "Kopiebereich" seine Größe:
Sub Objekt_4() Set Originalbereich = Workbooks("OBJEKT.XLS"). _ Sheets("Tabelle1").Cells(1, 1) Set Kopiebereich = Originalbereich Set Originalbereich = Originalbereich.Offset(3, 3) MsgBox "Originalbereich hat die Adresse: " & _ Originalbereich.Address MsgBox "Kopiebereich hat die Adresse: " & _ Kopiebereich.Address End Sub
Bewegen wir den Zellzeiger um x Zeilen und y Spalten vom Objekt weg, dann bleibt das Objekt an seiner alten Stelle:
Sub Objekt_5() Workbooks("OBJEKT.XLS").Activate Sheets("Tabelle1").Select Cells(1, 1).Select Set Originalbereich = Selection Originalbereich.Offset(3, 3).Select MsgBox "Originalbereich hat die Adresse: " & _ Originalbereich.Address MsgBox "Aber Cursor steht in " & _ ActiveCell.Address End Sub
Versetzen wir "Originalbereich", bleibt "Kopiebereich" am ursprünglichen Ort von "Originalbereich":
Sub Objekt_6() Workbooks("OBJEKT.XLS").Activate Sheets("Tabelle1").Select Cells(1, 1).Select Set Originalbereich = Selection Set Kopiebereich = Originalbereich Set Originalbereich = Selection.Offset(3, 3) MsgBox "Originalbereich wurde versetzt nach: " & _ Originalbereich.Address MsgBox "Kopiebereich hat nach wie vor die " & _ "Adresse: " & Kopiebereich.Address End Sub
Copyright © by JOANNEUM RESEARCH Forschungsgesellschaft mbH |